package com.insight.repository;

import com.insight.common.enums.DatabaseType;
import com.insight.entity.DataSource;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * T026: DataSource Repository接口
 * 数据源数据访问层，使用Spring Data JPA
 *
 * @author Insight Team
 */
@Repository
public interface DataSourceRepository extends JpaRepository<DataSource, Long> {

    /**
     * 根据名称查找数据源
     *
     * @param name 数据源名称
     * @return 数据源Optional
     */
    Optional<DataSource> findByName(String name);

    /**
     * 根据数据库类型查找数据源列表
     *
     * @param dbType 数据库类型
     * @return 数据源列表
     */
    List<DataSource> findByDbType(DatabaseType dbType);

    /**
     * 查找所有启用的数据源
     *
     * @return 启用的数据源列表
     */
    List<DataSource> findByEnabledTrue();

    /**
     * 查找所有禁用的数据源
     *
     * @return 禁用的数据源列表
     */
    List<DataSource> findByEnabledFalse();

    /**
     * 检查数据源名称是否存在
     *
     * @param name 数据源名称
     * @return true 如果存在
     */
    boolean existsByName(String name);

    /**
     * 根据数据库类型和启用状态查找数据源
     *
     * @param dbType  数据库类型
     * @param enabled 是否启用
     * @return 数据源列表
     */
    List<DataSource> findByDbTypeAndEnabled(DatabaseType dbType, Boolean enabled);

    /**
     * 根据主机地址和端口查找数据源
     *
     * @param host 主机地址
     * @param port 端口号
     * @return 数据源列表
     */
    List<DataSource> findByHostAndPort(String host, Integer port);
}
